#pragma once

// Dependencies
#include "../mat4x4.hpp"
#include "../vec2.hpp"
#include "../vec3.hpp"
#include "../vec4.hpp"
#include "../gtc/constants.hpp"

#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
#	pragma message("GLM: GLM_GTC_matrix_transform extension included")
#endif

namespace glm
{
  /// Maps point by multiplying this matrix by point.
  /// @see gtc_mapPoint
  template <typename T, precision P>
  GLM_FUNC_DECL tvec3<T, P> mapPoint(
    tmat4x4<T, P> const & m,
    tvec3<T, P> const & p);

  /// Maps vector by multiplying the top 3x3 portion of this matrix by vector.
  /// The translation and projection components of this matrix are ignored.
  /// @see gtc_mapVector
  template <typename T, precision P>
  GLM_FUNC_DECL tvec3<T, P> mapVector(
    tmat4x4<T, P> const & mat,
    tvec3<T, P> const & v);

} // end namespace glm

#include "map.inl"